home *** CD-ROM | disk | FTP | other *** search
- ;/* shadowborder.c - Execute me to compile me with SAS C 5.10
- LC -b1 -cfistq -v -y -j73 shadowborder.c
- Blink FROM LIB:c.o,shadowborder.o TO shadowborder LIBRARY LIB:LC.lib,LIB:Amiga.lib
- quit
- **
- ** The following example draws a double border using two pens to create a
- ** shadow effect. The border is drawn in two positions to show the
- ** flexibility in positioning borders, note that it could also be attached
- ** to a menu, gadget or requester.
- **
- ** shadowborder.c - program to show the use of an Intuition Border.
- */
- #define INTUI_V36_NAMES_ONLY
-
- #include <exec/types.h>
- #include <intuition/intuition.h>
-
- #include <clib/exec_protos.h>
- #include <clib/dos_protos.h>
- #include <clib/intuition_protos.h>
-
- #include <stdio.h>
-
- #ifdef LATTICE
- int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */
- int chkabort(void) { return(0); } /* really */
- #endif
-
- struct Library *IntuitionBase = NULL;
-
- #define MYBORDER_LEFT (0)
- #define MYBORDER_TOP (0)
-
- /* This is the border data. */
- WORD myBorderData[] =
- {
- 0,0, 50,0, 50,30, 0,30, 0,0,
- };
-
-
- /*
- ** main routine. Open required library and window and draw the images.
- ** This routine opens a very simple window with no IDCMP. See the
- ** chapters on "Windows" and "Input and Output Methods" for more info.
- ** Free all resources when done.
- */
- VOID main(int argc, char **argv)
- {
- struct Screen *screen;
- struct DrawInfo *drawinfo;
- struct Window *win;
- struct Border shineBorder;
- struct Border shadowBorder;
-
- ULONG mySHADOWPEN = 1; /* set default values for pens */
- ULONG mySHINEPEN = 2; /* in case can't get info... */
-
- IntuitionBase = OpenLibrary("intuition.library",37);
- if (IntuitionBase)
- {
- if (screen = LockPubScreen(NULL))
- {
- if (drawinfo = GetScreenDrawInfo(screen))
- {
- /* Get a copy of the correct pens for the screen.
- ** This is very important in case the user or the
- ** application has the pens set in a unusual way.
- */
- mySHADOWPEN = drawinfo->dri_Pens[SHADOWPEN];
- mySHINEPEN = drawinfo->dri_Pens[SHINEPEN];
-
- FreeScreenDrawInfo(screen,drawinfo);
- }
- UnlockPubScreen(NULL,screen);
- }
-
- /* open a simple window on the workbench screen for displaying
- ** a border. An application would probably never use such a
- ** window, but it is useful for demonstrating graphics...
- */
- if (win = OpenWindowTags(NULL,
- WA_PubScreen, screen,
- WA_RMBTrap, TRUE,
- TAG_END))
- {
- /* set information specific to the shadow component of the border */
- shadowBorder.LeftEdge = MYBORDER_LEFT + 1;
- shadowBorder.TopEdge = MYBORDER_TOP + 1;
- shadowBorder.FrontPen = mySHADOWPEN;
- shadowBorder.NextBorder = &shineBorder;
-
- /* set information specific to the shine component of the border */
- shineBorder.LeftEdge = MYBORDER_LEFT;
- shineBorder.TopEdge = MYBORDER_TOP;
- shineBorder.FrontPen = mySHINEPEN;
- shineBorder.NextBorder = NULL;
-
- /* the following attributes are the same for both borders. */
- shadowBorder.BackPen = shineBorder.BackPen = 0;
- shadowBorder.DrawMode = shineBorder.DrawMode = JAM1;
- shadowBorder.Count = shineBorder.Count = 5;
- shadowBorder.XY = shineBorder.XY = myBorderData;
-
- /* Draw the border at 10,10 */
- DrawBorder(win->RPort,&shadowBorder,10,10);
-
- /* Draw the border again at 100,10 */
- DrawBorder(win->RPort,&shadowBorder,100,10);
-
- /* Wait a bit, then quit.
- ** In a real application, this would be an event loop, like the
- ** one described in the Intuition Input and Output Methods chapter.
- */
- Delay(200);
-
- CloseWindow(win);
- }
- CloseLibrary(IntuitionBase);
- }
- }
-